package com.example.app1;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import com.example.app1.util.CacheKey;
import com.example.app1.util.CacheUtil;
import com.example.app1.util.MyConstants;

import org.json.JSONArray;
import org.json.JSONException;

import java.util.ArrayList;

public class MainFragment extends Fragment {
    private static final String TAG = "MainFragment";

    TextView resultText;
    String content;
    View mainScrollView;
    LinearLayout contentLayout;
    ArrayList<View> textViewList = new ArrayList<>();
    View.OnLongClickListener contentTouchListener = null;
    RelativeLayout.LayoutParams layoutParams = null;
    private SharedPreferences sharedPreferences;

    @SuppressLint("ClickableViewAccessibility")
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//        创建 Fragment 的视图层次结构，返回 Fragment 的 View 对象或布局
        LogUtil.info(TAG, "onCreateView 创建 Fragment 的视图层次结构");

        this.sharedPreferences = this.requireContext().getSharedPreferences(MyConstants.CACHE_NAME, Context.MODE_PRIVATE);

        String msg = "日志目录：\n" + requireActivity().getExternalCacheDir().getAbsolutePath();

        View mainView = inflater.inflate(R.layout.fragment_main, container, false);
        this.resultText = mainView.findViewById(R.id.resultText);
        this.mainScrollView = mainView.findViewById(R.id.mainScrollView);
        this.contentLayout = mainView.findViewById(R.id.contentLayout);
//        msg = getLongStr();
        this.resultText.setText(msg);

        return mainView;
    }

    private void checkBeforeAddTextView() {
        if (this.contentTouchListener == null) {
            this.contentTouchListener = v -> {
                v.setBackgroundColor(getResources().getColor(R.color.light_green));
                LogUtil.info(TAG,"set" + v.getId() + " Background");

                CacheUtil.writePlayAtIdx(sharedPreferences, false, v.getId());  // 更新缓存，触发chang监听，通知跳转播放

                return false;
            };
        }
        if (this.layoutParams == null) {
            this.layoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            this.layoutParams.topMargin = getResources().getInteger(R.integer.contentMarginTop);
        }

    }

    /**
     *
     * @param contentJsonArrayString 内容jsonArrayString
     */
    public void setResultText(String contentJsonArrayString) {
        if (contentJsonArrayString == null || contentJsonArrayString.trim().isEmpty()) {
            LogUtil.info(TAG, "setResultText 空内容");
            return;
        }
        checkBeforeAddTextView();
        this.mainScrollView.setScrollY(0);  // 设置滚动view到开头位置
        try {
            JSONArray contentArray = new JSONArray(contentJsonArrayString);
            this.contentLayout.removeAllViews();  // 清空原内容
            this.textViewList.clear();
            for (int i = 0; i < contentArray.length(); i++) {
                TextView newTextView = new TextView(this.getContext());
                newTextView.setId(i);
                newTextView.setText(contentArray.getString(i));
                newTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, getResources().getInteger(R.integer.contentSPFontSize));
                newTextView.setTextColor(getResources().getColor(R.color.hui));
                newTextView.setLineSpacing(Double.valueOf(getResources().getInteger(R.integer.contentExtraSpace) * 1.0 / 100).floatValue(), Double.valueOf(getResources().getInteger(R.integer.contentMultiplier) * 1.0 / 100).floatValue());
                newTextView.setLayoutParams(this.layoutParams);

                newTextView.setOnLongClickListener(this.contentTouchListener);

                this.contentLayout.addView(newTextView);
                this.textViewList.add(newTextView);
            }
        } catch (JSONException e) {
            LogUtil.info(TAG, "setResultText jsonArray格式异常", e);
        }
    }

    public void setCurrentIdx(String currentIdx) {
        if (this.textViewList == null || this.textViewList.isEmpty()) {
            return;
        }
        for (int i = 0; i < this.textViewList.size(); i++) {
            if ((i + "").equals(currentIdx)) {
                this.textViewList.get(i).setBackgroundColor(getResources().getColor(R.color.light_yellow));
            } else {
                this.textViewList.get(i).setBackgroundColor(Color.TRANSPARENT);  // 设置背景色透明
            }
        }
    }

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        // 当 Fragment 与 Activity 相关联时调用，可以通过 getActivity() 方法获取相关联的 Activity。
        LogUtil.info(TAG, "onAttach Fragment 与 Activity 相关联");
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 在 Fragment 创建时调用，通常用于初始化 Fragment，但不能直接操作 UI 元素。
        LogUtil.info(TAG, "onCreate Fragment 创建");
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        // 当关联的 Activity 的 onCreated() 方法执行完毕时调用
        LogUtil.info(TAG, "onViewCreated 关联的Activity的 onCreated() 方法执行完毕");
    }

    @Override
    public void onStart() {
        super.onStart();
        // Fragment 可见但不可交互时调用
        LogUtil.info(TAG, "onStart Fragment 可见但不可交互");
    }

    @Override
    public void onResume() {
        super.onResume();
        // Fragment 可见且可交互时调用
        LogUtil.info(TAG, "onResume Fragment 可见且可交互");
    }

    @Override
    public void onPause() {
        super.onPause();
        // 当 Fragment 失去焦点、不可交互时调用
        LogUtil.info(TAG, "onPause Fragment 失去焦点、不可交互");
    }

    @Override
    public void onStop() {
        super.onStop();
        // 当 Fragment 不可见时调用
        LogUtil.info(TAG, "onStop 当 Fragment 不可见");
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        // 当 Fragment 的视图被移除时调用
        LogUtil.info(TAG, "onDestroyView 当 Fragment 的视图被移除");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        // 当 Fragment 被销毁时调用
        LogUtil.info(TAG, "onDestroy 当 Fragment 被销毁");
    }

    @Override
    public void onDetach() {
        super.onDetach();
        // 当 Fragment 与 Activity 解除关联时调用
        LogUtil.info(TAG, "onDetach 当 Fragment 与 Activity 解除关联");
    }
}
